iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
自我挑戰組

用 30 天和 ASP.NET Core 打造一個活動報名管理系統系列 第 6

ASP.NET Core - 活動報名管理系統:Day6 EF Core 自訂欄位屬性以及簡易的 CRUD

  • 分享至 

  • xImage
  •  

自訂欄位屬性

在昨天我們成功使用 EF Core Migration,在 DB 新增了 Table,但像是 nvarchar 欄位長度卻被設定為 MAX,這對於 DB 效能其實是很不好的,如果沒有特別的用途,建議還是不要設定為 MAX。

其實在建立 Model 時,應該就會發現我在時間的欄位都加上了 Column Attribute,將 TypeName 欄位格式指定為 datetime2。

ASP.NET Core 提供了許多 Attribute,Column 就是其中一種,其實 Column 實際上的 ClassName 是 ColumnAttribute,但 ASP.NET Core 會自動判別繼承 Attribute 的 ClassName,所以只要你的 Class 是繼承 Attribute 且 ClassName 最後有 Attribute 的字,實際上在使用時可以省略 Attrubute

而這裡指定長度所使用的 Attribute 是 StringLength

Title,除了指定 最大 50 字元外,也指定了最少需要 5 字元,並且當輸入不符合此範圍的字元數的話,顯示自訂的錯誤訊息。

接著在 .NET CLI 輸入 dotnet ef migrations add SetEventsCol,這裡看到新增的 Migrations 內容:

Up Function 的作用為:當執行 dotnet ef datebase update 時,所執行的 Function,也就是更新 DB 的內容;
Down Function 即是退回上一個 Migration 時,會執行的方法,可以看到兩者的內容是相反的。
Up 來看,可以發現 Title 欄位的 type 欄位型別被設定為 nvarchar(50) 了,也就代表我們在 Model 設定的 StringLength 是成功的。

接著我們就執行 dotnet ef datebase update,更新 DB 的 Events Table:

欄位長度設定成功!

其他還有一些設定,e.g. 欄位不允許 Null -> Model 設定 [Required] 等。

建立 CRUD 的 Controller 與 View

Table 建立好了,就代表我們現在可以執行 CRUD 了,ASP.NET Core 提供了很棒的功能,叫做 Scaffolding,可以稱之為範本新增。

我們可以用建立好的 Model 以及 DbContext,透過 Scaffolding 來自動建立最基礎的 CRUD 頁面,且頁面不是只有顯示 Table 的所有欄位,更幫我們建立了 CRUD 的後端 Function。

對 Controller 資料夾右鍵選擇加入 > 新增 Scaffold 項目,並選擇 使用 Entity Framework 執行檢視的 MVC 控制器

新增後,可以看到 Scaffolding 幫我們新增了 Controller 與 View,真的很快速。

接著直接建置起來,來看看這些功能是不是真的可以使用。

瀏覽建置好的 Views 以及測試功能

可以看到 Events Table 中的欄位都列出來了,除了作為 Primary Key 的 Id

點進 Create 頁面可以看到每個 input 都自動帶入該有的形式,例如 datetime2 型別是 datepicker 的 input。

如果 input 不符合 Attribute 的設定,則會直接顯示指定的錯誤訊息出來。

欄位都填好送出後,在 Index 頁看到成功新增了一筆資料。

至此 Events 基本的 CRUD 都建置完成了,但這些都還不符合功能需求,後續我們再慢慢修改。

本日結語

今天我們總算做出 CRUD 的功能了,但是有沒有發現一個問題,就是 CreateTime, CreateUser 等欄位理論上不應該由使用者自己填入,應該是在新增資料時,在後端自動帶入。
但如果不想在 Model 使用 [Required] 呢?

明天將介紹另一個設定 Table 屬性的方法: Fluent API。

我們明天見!

Reference

Data Annotations - StringLength Attribute in EF 6 & EF Core


上一篇
ASP.NET Core - 活動報名管理系統:Day5 使用 Entity Framework Core 連接資料庫並建立 Table
下一篇
ASP.NET Core - 活動報名管理系統:Day7 EF Core FluentAPI - 1
系列文
用 30 天和 ASP.NET Core 打造一個活動報名管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言